import java.util.concurrent.CompletableFuture;

public class Lesson13 {

    /**
     *  使用BiFunction处理两个阶段的结果
     *  如果CompletableFuture依赖两个前面阶段的结果， 它复合两个阶段的结果再返回一个结果，
     *  我们就可以使用thenCombine()函数。整个流水线是同步的，所以getNow()会得到最终的结果，它把大写和小写字符串连接起来。
     * */
    public static void main(String[] args) {
        String message = "Message";
        CompletableFuture completableFuture = CompletableFuture
                .completedFuture(message)
                .thenApply(String::toUpperCase)
                .thenCombine(CompletableFuture.completedFuture(message).thenApply(String::toLowerCase), (s1, s2) -> s1 + s2)
                .thenCombine(CompletableFuture.completedFuture(message).thenApply(String::toLowerCase), (s1, s2) -> s1 + s2);
        System.out.println(completableFuture.getNow(null));
    }
}
